package com.ruoyi.common.utils;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import org.apache.commons.lang3.StringUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 字符串或列表反序列化器
 * 用于处理前端可能传递字符串或列表的情况
 * 
 * @author ruoyi
 */
public class StringOrListDeserializer extends JsonDeserializer<List<String>> {
    
    @Override
    public List<String> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        JsonNode node = p.getCodec().readTree(p);
        
        if (node.isArray()) {
            // 如果是数组，直接转换为List
            List<String> result = new ArrayList<>();
            for (JsonNode item : node) {
                if (item.isTextual()) {
                    result.add(item.asText());
                }
            }
            return result;
        } else if (node.isTextual()) {
            // 如果是字符串，按逗号分割转换为List
            String text = node.asText();
            if (StringUtils.isEmpty(text)) {
                return new ArrayList<>();
            }
            return new ArrayList<>(Arrays.asList(text.split(",")));
        }
        
        return new ArrayList<>();
    }
}
